package plugados.visao;

import java.awt.Cursor;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JTable;
import javax.swing.ImageIcon;

import java.awt.Color;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.border.BevelBorder;

import plugados.controle.ConexaoBanco;
import plugados.controle.ControleCidade;
import plugados.modelo.ModeloCidade;
import plugados.modelo.ModeloTabela;

import javax.swing.JComboBox;
import javax.swing.JScrollBar;
import javax.swing.DropMode;

public class FrmCidade extends JFrame {

	ConexaoBanco connEstado = new ConexaoBanco();
	ConexaoBanco connCidade = new ConexaoBanco();
	ModeloCidade mod = new ModeloCidade();
	ControleCidade controleCidade = new ControleCidade();
	
	private JPanel contentPane;
	private JTextField textFieldCod = new JTextField();;
	private JTextField textFieldCidade = new JTextField();;
	private JTable jTableCidade = new JTable();;
	private JButton btnSalvar = new JButton("");
	private JButton btnNovo = new JButton("");
	private JButton btnEditar = new JButton("");
	private JButton btnExcluir = new JButton("");
	private JLabel lblCidade = new JLabel("Cidade");
	private JLabel lblEstado = new JLabel("Estado:");
	private JLabel lblCod = new JLabel("Cod:");
	private JComboBox<String> comboBoxEstado = new JComboBox<String>();
	
	/**
	 *  Preenchendo jTable
	 */
	public void preencherTabela(String sql) {
		
		ArrayList<Object[]> dados = new ArrayList<Object[]>();
		
		String[] colunas =  new String[]{"ID", "Cidade", "Estado"};
		
		connCidade.executaSQL(sql);
		try {
			connCidade.rs.first();
			do {
				dados.add(new Object[]{connCidade.rs.getInt("id_cidade"), connCidade.rs.getString("nm_cidade"), connCidade.rs.getString("sg_estado")});
			} while(connCidade.rs.next());
		} catch(SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao preencher tabela!\n" +
												"Erro: " + e.getMessage());
		}
	
		ModeloTabela modelo = new ModeloTabela(dados, colunas);
		jTableCidade.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		jTableCidade.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
		jTableCidade.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		jTableCidade.setRowMargin(3);
		jTableCidade.setFont(new Font("Courier New", Font.BOLD, 15));
		jTableCidade.setModel(modelo);
		
		jTableCidade.getColumnModel().getColumn(0).setPreferredWidth(80);
		jTableCidade.getColumnModel().getColumn(0).setResizable(false);

		jTableCidade.getColumnModel().getColumn(1).setPreferredWidth(180);
		jTableCidade.getColumnModel().getColumn(1).setResizable(false);

		jTableCidade.getColumnModel().getColumn(2).setPreferredWidth(40);
		jTableCidade.getColumnModel().getColumn(2).setResizable(false);
		
		jTableCidade.getTableHeader().setReorderingAllowed(false);
		jTableCidade.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	}

	
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FrmCidade frame = new FrmCidade();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public FrmCidade() {
		
		getComponents();
		connEstado.conecta();
		connCidade.conecta();
		connEstado.executaSQL("select * from estado order by nm_estado");
		comboBoxEstado.removeAllItems();
		try {
			connEstado.rs.first();
			do {
				comboBoxEstado.addItem(connEstado.rs.getString("nm_estado"));
			} while (connEstado.rs.next()); 
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(rootPane, "Erro ao selecionar estados!\n" +
													"Erro: " + e.getMessage());
		}
		
		
		preencherTabela("select * from cidade inner join estado on cidade.id_estado = estado.id_estado");
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 767, 481);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBounds(12, 42, 741, 398);
		contentPane.add(panel);
		panel.setLayout(null);
	
		lblCod.setBounds(12, 30, 52, 15);
		panel.add(lblCod);
		textFieldCod.setEnabled(false);
		
		
		textFieldCod.setBounds(92, 28, 62, 19);
		panel.add(textFieldCod);
		textFieldCod.setColumns(10);
		
		
		lblCidade.setBounds(12, 69, 70, 15);
		panel.add(lblCidade);
		textFieldCidade.setEnabled(false);
		
		textFieldCidade.setBounds(92, 67, 152, 19);
		panel.add(textFieldCidade);
		textFieldCidade.setColumns(10);
		
		lblEstado.setBounds(406, 69, 70, 15);
		panel.add(lblEstado);
		
		/**
		 * Novo
		 * 
		 */
		btnNovo.setToolTipText("Novo");
		btnNovo.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/images (9).jpg")));
		btnNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				btnSalvar.setEnabled(true);
				btnEditar.setEnabled(false);
				btnExcluir.setEnabled(false);
				btnNovo.setEnabled(false);
				textFieldCidade.setEnabled(true);
				textFieldCod.setText("");
				textFieldCod.setText("");
				
			}
		});
		btnNovo.setBounds(12, 131, 64, 64);
		panel.add(btnNovo);
		
		/**
		 * Salvar
		 * 
		 */
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					mod.setNmCidade(textFieldCidade.getText());
					connEstado.executaSQL(
							"select * from estado where nm_estado = '" + comboBoxEstado.getSelectedItem() + "'");
					connEstado.rs.first();
					mod.setIdEstado(connEstado.rs.getInt("id_estado"));
					controleCidade.InserirCidade(mod);
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao salvar!\n" + 
															"Erro: " + e.getMessage());
				}
				btnSalvar.setEnabled(false);
				btnEditar.setEnabled(false);
				btnExcluir.setEnabled(false);
				btnNovo.setEnabled(true);
				textFieldCidade.setEnabled(false);
				textFieldCidade.setText("");
				textFieldCod.setText("");
				preencherTabela("select * from cidade inner join estado on cidade.id_estado = estado.id_estado");
			}
		});
		
		btnSalvar.setEnabled(false);
		btnSalvar.setToolTipText("Salvar");
		btnSalvar.setBackground(Color.WHITE);
		btnSalvar.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/salvar_01.png")));
		btnSalvar.setBounds(92, 131, 64, 64);
		panel.add(btnSalvar);
		
		/**
		 * Editar
		 * 
		 */
		btnEditar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				try {
					mod.setIdCidade(Integer.parseInt(textFieldCod.getText()));
					mod.setNmCidade(textFieldCidade.getText());
					mod.setIdEstado(connCidade.rs.getInt("id_estado"));
					controleCidade.AlterarCidade(mod);
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao editar!\n" +
															"Erro: " + e.getMessage());
				}
				textFieldCidade.setText("");
				textFieldCod.setText("");
				preencherTabela("select * from cidade inner join estado on cidade.id_estado = estado.id_estado");
				
			}
		});

		btnEditar.setEnabled(false);
		btnEditar.setToolTipText("Editar");
		btnEditar.setBackground(Color.WHITE);
		btnEditar.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/kat-61821.png")));
		btnEditar.setBounds(168, 131, 64, 64);
		panel.add(btnEditar);
		
		/**
		 * Excluir
		 */
		btnExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					mod.setIdCidade(Integer.parseInt(textFieldCod.getText()));
					mod.setNmCidade(textFieldCidade.getText());
					mod.setIdEstado(connCidade.rs.getInt("id_estado"));
					controleCidade.ExcluirCidade(mod);
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao excluir!\n" +
															"Erro: " + e.getMessage());
				}
				textFieldCidade.setText("");
				textFieldCod.setText("");
				preencherTabela("select * from cidade inner join estado on cidade.id_estado = estado.id_estado");
			}
		});
		
		btnExcluir.setEnabled(false);
		btnExcluir.setToolTipText("Excluir");
		btnExcluir.setBackground(Color.WHITE);
		btnExcluir.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/delete.gif")));
		btnExcluir.setBounds(244, 131, 64, 64);
		panel.add(btnExcluir);
		
		/**
		 * Botão Primeiro
		 * @return
		 * retorna o primeiro registro do banco
		 */
		JButton btnPrimeiro = new JButton("");
		btnPrimeiro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					connCidade.executaSQL("select * from cidade order by id_cidade");
					connCidade.rs.first();
					textFieldCod.setText(String.valueOf(connCidade.rs.getInt("id_cidade")));
					textFieldCidade.setText(connCidade.rs.getString("nm_cidade"));
					connEstado.executaSQL("select * from estado where id_estado = '" + connCidade.rs.getInt("id_estado") + "'");
					connEstado.rs.first();
					comboBoxEstado.setSelectedItem(connEstado.rs.getString("nm_estado"));
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao pesquisar dados!\n" +
															"Erro: " + e.getMessage());
				}
				textFieldCidade.setEnabled(true);
				btnEditar.setEnabled(true);
				btnExcluir.setEnabled(true);
				btnSalvar.setEnabled(false);
				btnNovo.setEnabled(true);
			}
		});
		btnPrimeiro.setToolTipText("Primeiro");
		btnPrimeiro.setBackground(Color.WHITE);
		btnPrimeiro.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/setaesuerda.jpeg")));
		btnPrimeiro.setBounds(336, 131, 64, 64);
		panel.add(btnPrimeiro);
		
		
		/**
		 * Anterior
		 */
		JButton btnAnterior = new JButton("");
		btnAnterior.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					connCidade.rs.previous();
					textFieldCod.setText(String.valueOf(connCidade.rs.getInt("id_cidade")));
					textFieldCidade.setText(connCidade.rs.getString("nm_cidade"));
					connEstado.executaSQL("select * from estado where id_estado = '" + connCidade.rs.getInt("id_estado") + "'");
					connEstado.rs.first();
					comboBoxEstado.setSelectedItem(connEstado.rs.getString("nm_estado"));
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao pesquisar dados!\n" +
															"Erro: " + e.getMessage());
				}
				textFieldCidade.setEnabled(true);
				btnEditar.setEnabled(true);
				btnExcluir.setEnabled(true);
				btnSalvar.setEnabled(false);
				btnNovo.setEnabled(true);
			}
		});
		btnAnterior.setToolTipText("Anterior");
		btnAnterior.setBackground(Color.WHITE);
		btnAnterior.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/esquseta.jpeg")));
		btnAnterior.setBounds(412, 131, 64, 64);
		panel.add(btnAnterior);
		
		
		/**
		 * Proximo
		 */
		JButton btnProximo = new JButton("");
		btnProximo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					connCidade.rs.next();
					textFieldCod.setText(String.valueOf(connCidade.rs.getInt("id_cidade")));
					textFieldCidade.setText(connCidade.rs.getString("nm_cidade"));
					connEstado.executaSQL("select * from estado where id_estado = '" + connCidade.rs.getInt("id_estado") + "'");
					connEstado.rs.first();
					comboBoxEstado.setSelectedItem(connEstado.rs.getString("nm_estado"));
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao pesquisar dados!\n" +
															"Erro: " + e.getMessage());
				}
				textFieldCidade.setEnabled(true);
				btnEditar.setEnabled(true);
				btnExcluir.setEnabled(true);
				btnSalvar.setEnabled(false);
				btnNovo.setEnabled(true);
			}
		});
		btnProximo.setToolTipText("Proximo");
		btnProximo.setBackground(Color.WHITE);
		btnProximo.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/seta.jpeg")));
		btnProximo.setBounds(488, 131, 64, 64);
		panel.add(btnProximo);
		
		
		/**
		 * Ultimo
		 */
		JButton btnUltimo = new JButton("");
		btnUltimo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					connCidade.executaSQL("select * from cidade order by id_cidade");
					connCidade.rs.last();
					textFieldCod.setText(String.valueOf(connCidade.rs.getInt("id_cidade")));
					textFieldCidade.setText(connCidade.rs.getString("nm_cidade"));
					connEstado.executaSQL("select * from estado where id_estado = '" + connCidade.rs.getInt("id_estado") + "'");
					connEstado.rs.first();
					comboBoxEstado.setSelectedItem(connEstado.rs.getString("nm_estado"));
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao pesquisar dados!\n" +
															"Erro: " + e.getMessage());
				}
				textFieldCidade.setEnabled(true);
				btnEditar.setEnabled(true);
				btnExcluir.setEnabled(true);
				btnSalvar.setEnabled(false);
				btnNovo.setEnabled(true);
			}
		});
		btnUltimo.setToolTipText("Ultimo");
		btnUltimo.setBackground(Color.WHITE);
		btnUltimo.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/doublearrow.jpeg")));
		btnUltimo.setBounds(564, 131, 64, 64);
		panel.add(btnUltimo);
		
		JButton btnSair = new JButton("");
		btnSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnSair.setToolTipText("Sair");
		btnSair.setBackground(Color.WHITE);
		btnSair.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/on-off.png")));
		btnSair.setBounds(665, 131, 64, 64);
		panel.add(btnSair);
		
		jTableCidade.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		jTableCidade.setBounds(12, 231, 717, 155);
		panel.add(jTableCidade);
		
		comboBoxEstado.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		comboBoxEstado.setBounds(492, 64, 148, 24);
		panel.add(comboBoxEstado);
		
		JButton btnAdd = new JButton("");
		btnAdd.setToolTipText("Adicionar");
		btnAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				FrmEstado estado = new FrmEstado();
				estado.setVisible(true);
			}
		});
		btnAdd.setIcon(new ImageIcon(FrmCidade.class.getResource("/plugados/imagens/basic-icon-plus.png")));
		btnAdd.setBounds(689, 56, 28, 28);
		panel.add(btnAdd);
		
		JLabel lblCadasstroDeCidades = new JLabel("Cadastro de Cidades");
		lblCadasstroDeCidades.setHorizontalAlignment(SwingConstants.CENTER);
		lblCadasstroDeCidades.setFont(new Font("Courier New", Font.BOLD, 25));
		lblCadasstroDeCidades.setBounds(12, 0, 703, 30);
		contentPane.add(lblCadasstroDeCidades);
	}
}
